package com.rui.template.main;

import com.rui.template.model.Lisi;
import com.rui.template.model.ZhangSan;
import com.rui.template.obj.DayOffProcess;

/**
 * 模板方法模式（Template method pattern）
 *
 * <p>
 * 模板方法模式通常又叫模板模式，是指定义一个算法的骨架，并允许之类为其中的一个或者多个步骤提供实现。模板方法模式使得子类可以在不改变算法结构的情况下，重新定义算法的某些步骤。
 * <p>
 * 适用场景：
 * 一次性实现一个算法不变的部分，并将可变的行为留给子类来实现。
 * 各子类中公共的行为被提取出来并集中到一个公共的父类中，从而避免代码重复。
 * <p>
 * 优点：
 * 利用模板方法将相同处理逻辑的代码放到抽象父类中，可以提高代码的复用性。
 * 将不同的代码不同的子类中，通过对子类的扩展增加新的行为，提高代码的扩展性。
 * 把不变的行为写在父类上，去除子类的重复代码，提供了一个很好的代码复用平台，符合开闭原则。
 * <p>
 * 缺点：
 * 类数目的增加，每一个抽象类都需要一个子类来实现，这样导致类的个数增加。
 * 类数量的增加，间接地增加了系统实现的复杂度。
 * 继承关系自身缺点，如果父类添加新的抽象方法，所有子类都要改一遍。
 *
 * @author ZhangRui
 * @date 2023/03/03 13:31
 **/
public class TemplateMain {


    public static void main(String[] args) {

        DayOffProcess zhangsan = new ZhangSan();
        //领取申请表
        //填写申请信息
        //提交到技术部审批
        //张三签名
        //行政部备案
        zhangsan.dayOffProcess();


        DayOffProcess lisi = new Lisi();
        //领取申请表
        //填写申请信息
        //提交到市场部审批
        //李四签名
        //行政部备案
        lisi.dayOffProcess();
    }
}
